Oracle Order by 按汉字拼音排序 |
您所在的位置:网站首页 › 值班排序规则 拼音 › Oracle Order by 按汉字拼音排序 |
测试代码参见:
select name ,ascii(name) from ( select '{' name from dual union select '%' name from dual union select '中' name from dual union select '鑫' name1 from dual union select '贴' name2 from dual ) t order by nlssort(name,'nls_sort=schinese_pinyin_m')
在使用order by排序的时候,出现如下情况: 印象中中文排序应该默认是按照拼音排序的,为何"鑫"会排在"中"的后面呢?猜想order by是不是根据对应字符的ASCII码排的呢,因此列出了对应的ASCII,如下: 由此基本可以断定,确实是通过ASCII的大小来排序的,这也解释了为什么数字会排在字母之前,字母为什么会排在汉字之前的现象。但是为什么会出现汉字默认是通过拼音排序的错觉呢,于是查了一下汉字的编码规则,有提到如下一句: "一级汉字,是最常用的汉字,按汉语拼音字母顺序排列,共3755个;二级汉字,属于次常用汉字,按偏旁部首的笔划顺序排列,共3008个" 可知,如果排序的汉字都是一级汉字的话,确实是按照拼音顺序排列的,如果涉及到二级汉字,就不一定了。 但是,如果就是要让汉字通过拼音顺序排序呢,可以通过如下方式: 按照拼音顺序 ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_PINYIN_M') 按照部首顺序 ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_RADICAL_M') 按照笔画顺序 ORDER BY nlssort(NAME, 'NLS_SORT=SCHINESE_STROKE_M')
|
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |